<?php
class BlocManager
{
    /**
     * Variable de " globale"
     * */
    protected $db;                          // Liaison base de donnee
    protected $lang;                        // Fichier lanh
    protected $session;                     // Class session
    protected $setting;                     // Tableau des setting
    protected $smarty;                      // Class smarty pour affichage
    protected $cache;                       // Class lite pour acceder au cache
    
    protected $_printMessage = true;
    
    public $_error = '';
       
    /**
     * @desc Construit la class
     * */
    public function __construct($paramClass)
    {
        if(is_array($paramClass))
        {
            foreach($paramClass as $key => $value)
            {
                $this->$key = $value;
            } 
        }     
    }
    
    /**
     * @desc Affiche les message d action
     * @param $text : message a afficheer
     * @param $type : definie l encadrement et la couleur
     * @return void
     * */
    public function printErrorMessage($text, $type = 'success')
    {
        if($this->_printMessage === true)
        {
            $this->smarty->assign('error_msg', true);
            $this->smarty->assign('error_class', 'error_' . $type);
            $this->smarty->assign('error_image', 'comment_' . $type);
            $this->smarty->assign('error_message',$text);
            $this->smarty->assign('url_site',$this->setting['url_site']);   
        }        
    }
    
    /**
     * @desc ajout un bloc HTML
     * @return bool
     * */
    public function setAddHtml()
    {
        if(!$name = retrieve('POST','titre',true))
            $this->_error .= 'Name is empty<br />';
            
        if(!$contenu = retrieve('POST','contenu',true)) 
            $this->_error .= 'Empty text<br />';
            
        $emplacement = retrieve('POST','emplacement');
        $ordre = retrieve('POST','ordre');
        
        if($this->_error == '')
        {
            $QueryArray = array(
            'name'  =>  $name,
            'fichier'   =>  'bloc/bloc_html.php',
            'ordre' =>  is_numeric($ordre) ? 0 : $ordre,
            'actif' =>  '1',
            'emplacement'   =>  $emplacement,
            'plugins' => '',
            'contenu'   =>  addslashes($contenu) );
            
            $this->db->sql_query(CreateQueryInsert($QueryArray, 'immo_bloc'));
            
            $this->printErrorMessage($this->lang['Bloc_ajoute']);
            
            return true;           
        }
        else
        {
            $this->printErrorMessage($this->lang['Bloc_non_ajoute'] . '<br />' . $this->_error, 'warning');
            
            return false;
        }   
    }
    
    /**
     * @desc active un bloc disponible
     * @return bool
     * */
    public function setActive()
    {
        if(!$id = retrieve('POST','id',true))
            $this->_error .= 'No block selected <br />';
            
        if(!$name = retrieve('POST','titre',true)) 
            $this->_error .= 'Name was empty<br />';
            
        $emplacement = retrieve('POST','emplacement');
        $ordre = retrieve('POST','ordre');

        if($this->_error == '')
        {
            $BlocDuplique = $this->db->sql_query("SELECT * FROM immo_bloc_disponible WHERE id = '". $id ."'",'OBJECT');
            
            $QueryArray = array(
            'name'  =>  addslashes($name),
            'ordre' =>  is_numeric($ordre) ? $ordre : 0,
            'fichier'   =>  $BlocDuplique->fichier,
            'actif' =>  '1',
            'emplacement'   =>  $emplacement,
            'plugins' => $BlocDuplique->plugins,
            'fonction' =>   $BlocDuplique->fonction);
            
            $this->db->sql_query(CreateQueryInsert($QueryArray, 'immo_bloc'));
            
            $this->printErrorMessage($this->lang['Bloc_ajoute']);
            
            return true;   
        }
        else
        {
            $this->printErrorMessage($this->lang['Bloc_non_ajoute'] . '<br />' . $this->_error, 'warning');
            
            return false;   
        }       
    }
    
    /**
     * @desc Modifie un bloc html en fonction des donnees recu par le formulaire
     * @return void
     * */
    public function setEditHtml()
    {
        if(!$id = retrieve('POST','id',true)) 
            redirect('bloc.php?error=bloc_id');
        if(!$name = retrieve('POST','titre',true)) 
            redirect('bloc.php?error=bloc_titre');
        if(!$contenu = retrieve('POST','contenu',true)) 
            redirect('bloc.php?error=bloc_contenu');
        $emplacement = retrieve('POST','emplacement');
        $ordre = retrieve('POST','ordre');
   
        $QueryArray = array(
        'name'  =>  $name,
        'fichier'   =>  'bloc/bloc_html.php',
        'ordre' =>  is_numeric($ordre) ? $ordre : 0,
        'actif' =>  '1',
        'emplacement'   =>  $emplacement,
        'contenu'   =>  addslashes($contenu));  
        
        $this->saveEdit($QueryArray, $id);  
    }
    
    /**
     * @desc Modifie un bloc
     * @return bloc
     * */
    public function setEdit()
    {
        if(!$id = retrieve('POST','id',true)) 
            redirect('bloc.php?error=bloc_id');
        if(!$name = retrieve('POST','titre',true)) 
            redirect('bloc.php?error=bloc_titre');
        $emplacement = retrieve('POST','emplacement');
        $ordre = retrieve('POST','ordre');
        
        $QueryArray = array(
        'name'  =>  $name,
        'ordre' =>  is_numeric($ordre) ? $ordre : 0,
        'actif' =>  '1',
        'emplacement'   =>  $emplacement);
        
        $this->saveEdit($QueryArray, $id);
    }
    
    /**
     * @desc Enregistrement les modifications dans la base
     * @return void
     * */
    private function saveEdit($query_array, $bloc_id)
    {
        $this->db->sql_query(CreateQueryUpdate($query_array, 'immo_bloc'," id = '". $bloc_id ."' "));
        $this->printErrorMessage($this->lang['Bloc_modifie']);   
    }
    
    /**
     * @desc Supprime un bloc
     * @return void
     * */
    public function setDelete()
    {
       $this->session->csrf_check_get(true); 
        
       $bloc_id = retrieve('GET', 'bloc_id', true);
       
       if($bloc_id == '' || !is_numeric($bloc_id))
        $this->_error .= 'Invalid bloc';
        
       if($this->_error != '')
            $this->printErrorMessage($this->_error, 'fatal');
       else
       {
            $this->db->sql_query("DELETE FROM immo_bloc WHERE id = '" . $bloc_id . "'");
            $this->printErrorMessage($this->lang['Bloc_supprime']);
       }
    }
    
}